package account.model;

import dao.account.DataLayerAccount;
import tools.MD5; //wordt gebruikt bij het wachtwoord.
import tools.mail.Mail;
import tools.old.files.DocentRegistrerenModel;
import tools.old.files.Klas;

public class Account implements Comparable<Account> {

	private static Account instance;

	private Persoon persoon;
	private Student student;
	private Docent docent;

	private int account_id;
	private String gebruikersnaam;
	protected String wachtwoord;
	private int typenummer;
	private String server_ip;

	private DataLayerAccount dl = new DataLayerAccount();
	//	private Mail m = new Mail();
	//	private MD5 crypt = new MD5();

	public static Account getInstance() {
		if (instance == null) {
			instance = new Account();
		}
		return instance;
	}

	public Account() {}

	//constructor login
	public Account(int account_id, String gebruikersnaam, String wachtwoord) {
		this.account_id = account_id;
		this.gebruikersnaam = gebruikersnaam;
		this.wachtwoord = wachtwoord;
	}
	
	//constructor met persoonsgegevens
	public Account(Persoon persoon, String gebruikersnaam, String wachtwoord, int typenummer) {
		this.persoon = persoon;
		this.gebruikersnaam = gebruikersnaam;
		this.wachtwoord = wachtwoord;
		this.typenummer = typenummer;
	}

	//constructor persoon & studentgegevens
	public Account(Persoon persoon, Student student, String gebruikersnaam, String wachtwoord, int typenummer) {
		this.persoon = persoon;
		this.student = student;
		this.gebruikersnaam = gebruikersnaam;
		this.wachtwoord = wachtwoord;
		this.typenummer = typenummer;
	}

	//constructor persoon & docentgegevens
	public Account(Persoon persoon, Docent docent, String gebruikersnaam, String wachtwoord, int typenummer) {
		this.persoon = persoon;
		this.docent = docent;
		this.gebruikersnaam = gebruikersnaam;
		this.wachtwoord = wachtwoord;
		this.typenummer = typenummer;
	}

	//student account bijwerken
	public void updateStudent() {
		dl.openConn();
		dl.updateStudent(this, persoon, student);
		dl.closeConn();
	}

	//docent account bijwerken
	public void updateDocent() {
		dl.openConn();
		dl.updateDocent(this, persoon, docent);
		dl.closeConn();
	}

	public String toString() {
		return account_id + "; " + gebruikersnaam + "; " + wachtwoord + ";" + typenummer;
	}

	public int getAccount_id() {
		return account_id;
	}

	public void setAccount_id(int account_id) {
		this.account_id = account_id;
	}

	public String getGebruikersnaam() {
		return gebruikersnaam;
	}

	public void setGebruikersnaam(String gebruikersnaam) {
		this.gebruikersnaam = gebruikersnaam;
	}

	public String getWachtwoord() {
		return wachtwoord;
	}

	public void setWachtwoord(String wachtwoord) {
		this.wachtwoord = wachtwoord;
	}

	public int compareTo(Account o) {
		return gebruikersnaam.compareToIgnoreCase(o.getGebruikersnaam());
	}

	public int getTypenummer() {
		return typenummer;
	}

	public void setTypenummer(int typenummer) {
		this.typenummer = typenummer;
	}
	
	public String getServer_ip() {
		return server_ip;
	}

	public String setServer_ip(String server_ip) {
		return this.server_ip = server_ip;
	}

//	public String getServer_pcnaam() {
//		return server_ip;
//	}
//
//	public String setServer_pcnaam(String server_ip) {
//		return this.server_ip = server_ip;
//	}

	public Persoon getPersoon() {
		return persoon;
	}

	public void setPersoon(Persoon persoon) {
		this.persoon = persoon;
	}

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	public Docent getDocent() {
		return docent;
	}

	public void setDocent(Docent docent) {
		this.docent = docent;
	}

	//OLD

	//constructor mail
	//	public Account(String email, String voornaam, String gebruikersnaam, String wachtwoord) {
	//		this.email = email;
	//		this.voornaam = voornaam;
	//		this.gebruikersnaam = gebruikersnaam;
	//		this.wachtwoord = wachtwoord;
	//	}

	//bericht versturen naar user & admin
	//	public void mailVerzenden(Account b) {
	//		m.RegisterUserMail(b);
	//		m.RegisterAdminMail(b);
	//	}

}